{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XHamster网站数据分析\n",
    "通过分析xhamster网站的内容得到此报告，旨在分析xhamster的特性，并且针对个人喜好进行自动的学习和打分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part1 数据导入与处理\n",
    "关于数据的获取，请见!https://github.com/TsingJyujing/DataSpider\n",
    "数据下载到本地的数据库以后（本文使用的是PostgreSQL数据库），首先需要对网站的内容进行打分，打分的界面仁者见仁，智者见智。\n",
    "在此只给代码，不赘述了。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Import libraries\n",
    "import psycopg2\n",
    "import numpy as np\n",
    "import matplotlib\n",
    "%matplotlib inline  \n",
    "from matplotlib.pyplot import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def genSQLConnection():\n",
    "    return psycopg2.connect(\n",
    "        database=\"pvideo\",\n",
    "        user=\"postgres\",\n",
    "        password=\"979323\",\n",
    "        host=\"localhost\",\n",
    "        port=\"5432\")\n",
    "\n",
    "def getRatedVideos(conn):\n",
    "    sql_cmd = \"\"\"\n",
    "SELECT id, title, img_urls, categories, rating, video_time, myrate\n",
    "FROM public.xhamster_spider WHERE myrate is not null \"\"\"\n",
    "    cur = conn.cursor()\n",
    "    cur.execute(sql_cmd)\n",
    "    res = cur.fetchall()\n",
    "    cur.close()\n",
    "    return res\n",
    "\n",
    "def getAllVideos(conn):\n",
    "    sql_cmd = \"\"\"\n",
    "SELECT id, title, img_urls, categories, rating, video_time\n",
    "FROM public.xhamster_spider\"\"\"\n",
    "    cur = conn.cursor()\n",
    "    cur.execute(sql_cmd)\n",
    "    res = cur.fetchall()\n",
    "    cur.close()\n",
    "    return res\n",
    "\n",
    "def getCategoriesSet(res):\n",
    "    tag_set = set([])\n",
    "    for row in res:\n",
    "        tag_set |= set(row[3])\n",
    "    return tag_set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "get 1659 tags:\n"
     ]
    }
   ],
   "source": [
    "conn = genSQLConnection()\n",
    "result_set = getRatedVideos(conn)\n",
    "result_set_all = getAllVideos(conn)\n",
    "tags = getCategoriesSet(result_set)\n",
    "print \"get %d tags:\" % len(tags)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "302332\n"
     ]
    }
   ],
   "source": [
    "print len(result_set_all)\n",
    "Tall = np.zeros(len(result_set_all))\n",
    "for i, res in enumerate(result_set_all):\n",
    "    Tall[i] = res[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# give index to tags\n",
    "tag_index_dict = {}\n",
    "tag_list = list(tags)\n",
    "for index, tag in enumerate(tag_list):\n",
    "    tag_index_dict[tag] = index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Convert to matrix/vector format\n",
    "X = np.zeros((len(result_set), len(tag_index_dict)), dtype=\"float32\")\n",
    "y = np.zeros((len(result_set), 1), dtype=\"float32\")\n",
    "T = np.zeros((len(result_set), 1), dtype=\"float32\")\n",
    "for i in range(len(result_set)):\n",
    "    for tag in result_set[i][3]:\n",
    "        X[i, tag_index_dict[tag]] = 1\n",
    "    y[i] = result_set[i][-1]\n",
    "    T[i] = result_set[i][5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " ## Part 2 初步的可视化\n",
    " 首先对数据进行可视化的是时间，首先看一下时间的原始分布："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7ff7a412eb10>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkoAAAF5CAYAAABgJQUHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3X28XWV95/3PNyAgKCAiiVaotrQYnyiEJ8cCWrxBhbZ2\n7ChRqqCOtVVkcKQ+3HVMoQ+Ko1AFHAZQBCF3LdZqBY2iVhSQjIQqloAdRRExkUgMyHOS3/3HWkcW\n26wkZ3OSvU/O5/167ddhr+u397rWxTk537PWta6dqkKSJEm/ataoOyBJkjSuDEqSJEk9DEqSJEk9\nDEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9Rh6UkrwhybeSrGofVyV5\n4UDNyUluS3JPki8m2XOgfdskZyZZkeSuJJck2W2g5nFJLmr3sTLJuUl2GKjZPcmlSe5OsizJqUlm\nDdQ8O8kVSe5N8sMkJ031mEiSpPEw8qAE/Ah4G7AvMA/4MvDpJHMBkrwNeBPweuAA4G5gUZJtOu9x\nOnAk8FLgEOBJwCcH9nMxMBc4rK09BDh7orENRJcBWwMHAa8GjgVO7tQ8FlgE3Nz29yRgQZLXPbIh\nkCRJ4yjj+KG4SX4GvLWqPprkNuB9VXVa27YjsBx4dVV9on1+O3B0VX2qrdkLWAocVFWL29D178C8\nqrqurTkCuBR4clUtS/Ii4DPAE6tqRVvzp8B7gCdU1eokfwacAsypqtVtzd8Bf1hVT98sgyNJkjab\ncTij9EtJZiU5GtgeuCrJU4E5wJcmaqrqTuAa4Dntpv1ozgJ1a24CbunUHASsnAhJrcuBAg7s1Fw/\nEZJai4CdgGd0aq6YCEmdmr2S7DTUQUuSpLE1FkEpyTOT3AXcD5wF/FEbdubQhJnlAy9Z3rYBzAYe\naANUX80c4KfdxqpaA9wxULOu/TDJGkmStIXYetQdaN0I7E1z9uaPgQuSHDLaLk2dJI8HjgB+ANw3\n2t5IkjStbAc8BVhUVT/b3Dsfi6DUXsr6fvv0uiQHACcApwKhOWvUPZMzG5i4jLYM2CbJjgNnlWa3\nbRM1g3fBbQXsMlCz/0DXZnfaJr7O3kDNuhwBXLSedkmStH6vpLkxa7Mai6C0DrOAbavq5iTLaO5U\n+zb8cjL3gcCZbe21wOq2pjuZew/g6rbmamDnJPt05ikdRhPCrunUvDPJrp15SocDq4AbOjV/nWSr\n9tLdRM1NVbVqPcfzA4CPf/zjzJ07d1IDsaU58cQTOe2000bdjbHgWDQch4bj8BDHouE4NJYuXcox\nxxwD7e/SzW3kQSnJ3wKfo5l8/ViaxHgoTQCB5tb/v0zyf2kG6RTgVuDT0EzuTnIe8IEkK4G7gA8C\nV1bV4rbmxiSLgHPaO9e2AT4ELKyqiTNBX6AJRBe2SxI8sd3XGVX1YFtzMfA/gI8keS/wLODNNGe/\n1uc+gLlz57LvvvtOfpC2IDvttNOMH4MJjkXDcWg4Dg9xLBqOw68YydSVkQclmktiH6MJJqtozhwd\nXlVfBqiqU5NsT7Pm0c7A14AXVdUDnfc4EVgDXAJsC3weeOPAfl4BnEFzt9vatvaXAaeq1iY5Cvgw\ncBXNek3nA+/u1NyZ5HCas1nfBFYAC6rqvEc8CpIkaeyMPChV1QYXa6yqBcCC9bTfDxzfPvpqfg4c\ns4H9/Ag4agM136E54yVJkrZwY7E8gCRJ0jgyKGmzmj9//qi7MDYci4bj0HAcHuJYNByH8TCWH2Gy\npUmyL3Dttdde68Q8SZImYcmSJcybNw+ajyFbsrn37xklSZKkHgYlSZKkHgYlSZKkHgYlSZKkHgYl\nSZKkHgYlSZKkHiNfmXsmOfXUU9ltt902qva1r30te++99ybukSRJWh+D0mb0yU9eS/LoDdatXv1D\nli69iS9+cdFm6JUkSepjUNqMVq/+B2BjFpw8mrVrf7apuyNJkjbAOUqSJEk9DEqSJEk9DEqSJEk9\nDEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqS\nJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9\nDEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9DEqSJEk9Rh6UkrwjyeIkdyZZnuRT\nSX57oOajSdYOPC4bqNk2yZlJViS5K8klSXYbqHlckouSrEqyMsm5SXYYqNk9yaVJ7k6yLMmpSWYN\n1Dw7yRVJ7k3ywyQnTfW4SJKk0Rt5UAIOBj4EHAi8AHgU8IUkjx6o+xwwG5jTPuYPtJ8OHAm8FDgE\neBLwyYGai4G5wGFt7SHA2RONbSC6DNgaOAh4NXAscHKn5rHAIuBmYF/gJGBBktdN9sAlSdJ423rU\nHaiqF3efJzkW+CkwD/h6p+n+qrp9Xe+RZEfgNcDRVfXVdttxwNIkB1TV4iRzgSOAeVV1XVtzPHBp\nkrdW1bK2/WnA86tqBXB9kncB70myoKpWA8fQhLnXts+XJtkHeAtw7lSMiSRJGg/jcEZp0M5AAXcM\nbH9ee2nuxiRnJdml0zaPJvR9aWJDVd0E3AI8p910ELByIiS1Lm/3dWCn5vo2JE1YBOwEPKNTc0Ub\nkro1eyXZaXKHKkmSxtlYBaUkobmE9vWquqHT9DngVcDvAX8BHApc1tZDcynugaq6c+Atl7dtEzU/\n7TZW1RqaQNatWb6O92CSNZIkaQsw8ktvA84Cng48t7uxqj7RefrvSa4Hvgc8D/jKZuvdI3Yizcmp\nrvn86nQrSZJmnoULF7Jw4cKHbVu1atWIetMYm6CU5AzgxcDBVfWT9dVW1c1JVgB70gSlZcA2SXYc\nOKs0u22j/Tp4F9xWwC4DNfsP7G52p23i6+wN1PQ4jWb+tyRJGjR//nzmz3/4yYMlS5Ywb968EfVo\nTC69tSHpD2kmUd+yEfVPBh4PTASqa4HVNHezTdTsBewBXN1uuhrYuZ14PeEwIMA1nZpnJdm1U3M4\nsAq4oVNzSBuyujU3VdVoY68kSZpSIw9KSc4CXgm8Arg7yez2sV3bvkO7ltGBSX49yWHAPwPfpZlE\nTXsW6TzgA0mel2Qe8BHgyqpa3Nbc2Nafk2T/JM+lWZZgYXvHG8AXaALRhe1aSUcApwBnVNWDbc3F\nwAPAR5I8PcnLgTcD79+U4yRJkja/cbj09gaaO8/+dWD7ccAFwBrg2TSTuXcGbqMJPP+jE16gmQC0\nBrgE2Bb4PPDGgfd8BXAGzd1ua9vaEyYaq2ptkqOADwNXAXcD5wPv7tTcmeRw4Ezgm8AKYEFVnTfM\nwUuSpPE18qBUVes9q1VV9wEv3Ij3uR84vn301fycZh2k9b3Pj4CjNlDzHZo77yRJ0hZs5JfeJEmS\nxpVBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdB\nSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIk\nqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdB\n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\ni5PMBY4A5lXVdW3N8cClSd5aVcva9qcBz6+qFcD1Sd4FvCfJgqpaDRwDPAp4bft8aZJ9gLcA526C\n4ZEkSSMyLmeUeiV5KjAH+NLEtqq6E7gGeE67aT+a0NetuQm4pVNzELByIiS1Lqc5g3Vgp+b6NiRN\nWATsBDyjU3NFG5K6NXsl2WnIw5QkSWNo7IMSTUgqmjNIXcvbNoDZwANtgOqrmQP8tNtYVWuAOwZq\n1rUfJlkjSZK2AGNx6W3mOJHm5FTX/PYhSdLMtnDhQhYuXPiwbatWrRpRbxrTISgtA0Jz1qh7Jmc2\ncF2nZpskOw6cVZrdtk3UDN4FtxWwy0DN/gP7n91pm/g6ewM1PU6jmf8tSZIGzZ8/n/nzH37yYMmS\nJcybN29EPZoGl96q6maaAHLYxLZ28vaBwFXtpmuB1QM1ewF7AFe3m64Gdm4nXk84jCaEXdOpeVaS\nXTs1hwOrgBs6NYe0Iatbc1NVjTb2SpKkKTUWQSnJDkn2TvI77abfaJ/v3j4/HfjLJL+f5FnABcCt\nwKfhl5O7zwM+kOR5SeYBHwGurKrFbc2NNJOuz0myf5LnAh8CFrZ3vAF8gSYQXdiulXQEcApwRlU9\n2NZcDDwAfCTJ05O8HHgz8P5NMzqSJGlUxuXS237AV2gmbRcPhY6PAa+pqlOTbE+z5tHOwNeAF1XV\nA533OBFYA1wCbEuz3MAbB/bzCuAMmrvd1ra1J0w0VtXaJEcBH6Y5W3U3cD7w7k7NnUkOB84Evgms\nABZU1XmPbAgkSdK4GYug1K59tN6zW1W1AFiwnvb7gePbR1/Nz2nWQVrffn4EHLWBmu8Ah66vRpIk\nTX9jcelNkiRpHBmUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmS\nehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiU\nJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmS\nehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiUJEmSehiU\nJEmSehiUJEmSehiUJEmSekyLoJTk3UnWDjxuGKg5OcltSe5J8sUkew60b5vkzCQrktyV5JIkuw3U\nPC7JRUlWJVmZ5NwkOwzU7J7k0iR3J1mW5NQk02IcJUnS5EynX/DfAWYDc9rH7040JHkb8Cbg9cAB\nwN3AoiTbdF5/OnAk8FLgEOBJwCcH9nExMBc4rK09BDi7s59ZwGXA1sBBwKuBY4GTp+YQJUnSONl6\n1B2YhNVVdXtP2wnAKVX1WYAkrwKWAy8BPpFkR+A1wNFV9dW25jhgaZIDqmpxkrnAEcC8qrqurTke\nuDTJW6tqWdv+NOD5VbUCuD7Ju4D3JFlQVas31cFLkqTNbzqdUfqtJD9O8r0kH0+yO0CSp9KcYfrS\nRGFV3QlcAzyn3bQfTSjs1twE3NKpOQhYORGSWpcDBRzYqbm+DUkTFgE7Ac+YkqOUJEljY7oEpW/Q\nXOI6AngD8FTginb+0ByaMLN84DXL2zZoLtk90Aaovpo5wE+7jVW1BrhjoGZd+6FTI0mSthDT4tJb\nVS3qPP1OksXAD4GXATeOpleSJGlLNy2C0qCqWpXku8CewL8CoTlr1D3bMxuYuIy2DNgmyY4DZ5Vm\nt20TNYN3wW0F7DJQs/9Ad2Z32jbgRJqrdF3z24ckSTPbwoULWbhw4cO2rVq1akS9aUzLoJTkMTQh\n6WNVdXOSZTR3qn27bd+RZl7Rme1LrgVWtzWfamv2AvYArm5rrgZ2TrJPZ57SYTQh7JpOzTuT7NqZ\np3Q4sAp42HIF63YasO8QRyxJ0pZv/vz5zJ//8JMHS5YsYd68eSPq0TQJSkneB/wLzeW2XwP+CngQ\n+P/aktOBv0zyf4EfAKcAtwKfhmZyd5LzgA8kWQncBXwQuLKqFrc1NyZZBJyT5M+AbYAPAQvbO94A\nvkATiC5slyR4YruvM6rqwU04BJIkaQSmRVACnkyzxtHjgduBrwMHVdXPAKrq1CTb06x5tDPwNeBF\nVfVA5z1OBNYAlwDbAp8H3jiwn1cAZ9Dc7ba2rT1horGq1iY5CvgwcBXNek3nA++ewmOVJEljYloE\npara4CSeqloALFhP+/3A8e2jr+bnwDEb2M+PgKM21B9JkjT9TZflASRJkjY7g5IkSVIPg5IkSVIP\ng5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5Ik\nSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIP\ng5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5IkSVIPg5Ik\nSVKPrUd2n8x9AAAMZklEQVTdAa3bfffdx5IlSza6ftddd2WPPfbYhD2SJGnmMSiNpbv5xje+wbx5\n8zb6Fdtttz033bTUsCRJ0hQyKI2l+1m7djXwcWDuRtQv5b77jmHFihUGJUmSppBBaazNBfYddSck\nSZqxnMwtSZLUw6AkSZLUw6AkSZLUw6AkSZLUw6AkSZLUw6A0pCRvTHJzknuTfCPJ/qPu03SwcOHC\nUXdhbDgWDceh4Tg8xLFoOA7jwaA0hCQvB94PvBvYB/gWsCjJrqPs19KlS1myZMlGP2655ZbN3kd/\n8B/iWDQch4bj8BDHouE4jAfXURrOicDZVXUBQJI3AEcCrwFO3fzd+Qkwi2OOOWZSr3I1b0mS1s+g\nNElJHgXMA/52YltVVZLLgeeMplc/B9ay8St5g6t5S5K0YQalydsV2ApYPrB9ObDX+l+6dCN3ceek\nO9WY/EreS5dubJ/g/vvvZ9ttt31E9atWrer9sN/Jvv9U9Wkq6yfzmomx2NR9GuYDk2+55RZWrFgx\nVn2S9JBN/TMK/pxOMChtHts1XyZ3aQwuY+PC1ZWTrAe4DsgkL9fNojlz9cjq+z/sd7LvP3V9mrr6\nyb2mGYtN26dHPWpb3ve+97Lrrhs3hW7FihWcdNLbefDB+zZLn2699VYuuuiiDe9h1izWrt34fYxb\n/YZes65xmG7HMFX1G/s9sTn7NIpx7RuHzfEzCrDNNtvxT/90CU984hMn9bqp1vmDfrtR7D9VNYr9\nTlvtpbd7gJdW1Wc6288HdqqqP1rHa14BbPxPvSRJGvTKqrp4c+/UM0qTVFUPJrkWOAz4DECStM8/\n2POyRcArgR8Ak/kTQJKkmW474Ck0v0s3O88oDSHJy4DzgTcAi2nugvtj4GlVdfsIuyZJkqaQZ5SG\nUFWfaNdMOhmYDfwbcIQhSZKkLYtnlCRJknq4MrckSVIPg5IkSVIPg9ImNt0/PDfJwUk+k+THSdYm\n+YN11Jyc5LYk9yT5YpI9B9q3TXJmkhVJ7kpySZLdBmoel+SiJKuSrExybpIdBmp2T3JpkruTLEty\napJN/j2c5B1JFie5M8nyJJ9K8tvrqNuix6Hd9xuSfKvt36okVyV54UDNFj8Og5K8vf35+MDA9i1+\n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\noCRpS7Q18Iaq+gFAkkuAY4Dd2rlFNyb5CvB84B+T7AEcC+xeVcva9/hAkhcBxwF/Cfw6sKaqbu/s\nZw/gF8ClVXU38CPgWwN9uQ3YBpjTtkuaRgxKkrZE90yEpNZy4AcDE7CXAxNzoJ4JbAV8t3s5jibg\nrGj/+9HA/QP7+SLwQ+DmJJ8HPg98amA/99LMqdp++MORNCoGJUlbosFLXNWzbWKe5mOA1cC+wNqB\nul+0X1cA2yfZuqpWA1TVL5LsCzwPOJxmsvmCJPtV1Z3t63Zp93U7kqYdJ3NLElxHc0ZpdlV9f+Ax\nsezAv7Vfn959YVWtraovV9Xbgb2BpwC/1yl5JnBrVd2xaQ9B0qbgGSVJW4J1rbO00arqP5JcDFyQ\n5K00wWk3msDzrar6XFWtSHId8LvAtwGSHEkzMfwKmoniR7Z9uanz9gcDX3gk/ZM0Op5RkrQlmIoF\n4Y4FLgD+J3AjzV1x+wG3dGrOpZkUPuHnwH8GvgTcALweOLqqlgIk2RZ4CfC/p6B/kkbABSclaSMl\n2Y4mRL28qq7ZiPo3AC+pqhdu8s5J2iQ8oyRJG6mq7gNeBey6kS95gGY9J0nTlGeUJEmSenhGSZIk\nqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqYdBSZIkqcf/D/xA3pJp\nX6YyAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff78a2bb710>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "[F, x, p] = hist(Tall, bins = 35)\n",
    "xlabel('Time(s)')\n",
    "ylabel('Frequency')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "我们发现聚集在0附近的比较多，而且播放时间都是大于0的（这算常识了）\n",
    "我们再统计一下log(T)的分布："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7ff77c34cd10>"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff77c625d10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "[F, x, p] = hist(np.log10(Tall), bins = 50, normed=True, histtype='stepfilled', alpha=0.35)\n",
    "xlabel('log_10(Time(s))')\n",
    "ylabel('Frequency')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到现在的分布比较好看了，也具有更“好”的性质了（其实就是长的像正态，至于是不是正态应该qqplot一下）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false,
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nK+DXjDgOv8T2bUBP4ELnXPSmZbHaX+3+JM65n/HVkK7AVPzMmAFR1zwefH0mxkqg1Yn3cx+CX2dj\nX/xskt/iB8TmRJ13Iz7wXI5v97W1aJtI0rHK0+dFRJKbmQ0GXgAOcc6919jtEWmpkrKCYWY9zOyJ\nYGnj9Wb2uSVwy2kRSWrnAYsVLkQaV9KNwQj6Xd/FL0Q0CL+SYR98f6uItFBmFhrrcSwwspGbI9Li\nJV0XiZndChzonDussdsiIk2HmZXj9/r4JzA8mFEjIo0kGQPGV8BM/GqEh+H3H7jfOTe1URsmIiIi\nFZJxDMYu+Gl0C4Gj8fsmTDKzMxu1VSIiIlIhGSsYm4CPnHOHRBybCOzrnBsY4/xt8GM1vscvbywi\nIiI10xa/h9As59yq2lyYdIM88Yv4LIg6toCqdzwcRA23ahYREZGY/oJfv6XGkjFgvMuW+yz0o/Ka\n/5G+B3jyySfp379/PTar+Rk1ahR33x29C7VUR59ZfPS51Z4+s/joc6udBQsWcMYZZ0Ac+wglY8C4\nG78E8lXAs/hlec8FhlZx/kaA/v37k5WlpTJqIyMjQ59ZLekzi48+t9rTZxYffW5xq/UQg6Qb5Bks\ndXwyfhneL4FrgIudc/9s1IaJiIhIhWSsYOCcm0E9b2IkIiIi8Uu6CoaIiIg0fQoYUqWcnOjNIGVr\n9JnFR59b7ekzi48+t4aTdOtg1FawCVpubm6uBvaIiIjUQl5eHtnZ2QDZzrm82lyrCoaIiIgknAKG\niIiIJJwChoiIiCScAoaIiIgknAKGiIiIJJwChoiIiCScAoaIiIgknAKGiIiIJJwChoiIiCScAoaI\niIgknAKGiIiIJJwChoiIiCScAoaIiIgknAKGiIiIJJwChoiIiCScAoaIiIgknAKGiIiIJJwChoiI\niCScAoaIiIgknAKGiIiIJJwChoiIiCScAoaIiIgknAKGiIiIJJwChoiIiCScAoaIiIgknAKGiIiI\nJJwChoiIiCScAoaIiIgknAKGiIiIJJwChoiIiCRc0gUMM7vOzMqjbvMbu10iIiIS1qqxGxCnecCR\ngAXfb27EtoiISEu2fj3k50Pfvo3dkiYlWQPGZufcisZuhIiItHBvvgnnnQcdO8Jnn4HZ1q9pIZKu\niyTQx8yWmdn/zOxJM+vd2A0SEZEWZNUq+Nvf4KijYIcd4N//VriIkowB4wPgbGAQMAzYGZhjZh0a\n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\nwrRiE0m3HHvssaywwgqLlA0fPpzhw4eXFFHjIoJ585Zn0TE+gv24hZ9wDH2ZwXe5jhsYkZdV1o38\nO4mfur4AAA9mSURBVFXT5fJUVfMBrAAsS2o26XzAsvb2FWhvb6dPn1bLUc3MrCOjR49m9OjRi5TN\nmDGj2/trtQTjLdKjJFetKV8VeL2rDUeOHMmQIUMWV1w9QhL9+s2m0gFzIFO4kiPYjTGMZl+O4WWm\nMYKFicHCddPvVE3fZ1GV+RmkBONduhqwTHrXyYWZ2RKkoy/dbW1tDB06tFv7a6krRETMAyYAO1XK\nlJ78tBPwYFlx9aQ99tiWPn3GAMHt7MkmPM3XuYP9GM00BiHdWbX2tsCYmt+rp2vmn+r5fwDWyNPO\nByzbdNM1i35pZma2BGm1GgyAS4HrJU1g4W2qywHXlxlUTznvvBMYO3YYEycG+7XfzFTWYRYD6NPn\nLtZf/yWkkTz3XJ/cCfQEYBip0ud44Fuku3svBQ4H7ifdRXJWXn4/aVTU+0l3kRxFqsWodPQM4E76\n9z+WO++8rwdftZmZtRp19aCmZiXp+8CJpKaRx4EfRsT4TtYdAkyYMGFCyzeRVMycOZPTTruE228f\nx7x5y9Gv3/vsuee2nHvu8QCLLOvb9z0++cmleffdecyduwyzZr204DkYc+ak513Mnz+HlED0JyUj\nc0jPw+joORhrMGbMDb5F1cysF6hqIhkaEW2NbNuSCUYjlsQEo1plYLF6llXPVw9OVplWVM9XL3ef\nCzOz3uXjJBit2ERiVboafKx2WfV85ffaab3LzczMuuKvpGZmZlY4JxhmZmZWOCcYZmZmVjgnGGZm\nZlY4JxhmZmZWOCcYZmZmVjgnGGZmZlY4JxhmZmZWOCcYZmZmVjgnGGZmZlY4JxhmZmZWOCcYZmZm\nVjgnGGZmZlY4JxhmZmZWOCcYZmZmVjgnGGZmZlY4JxhmZmZWOCcYZmZmVjgnGGZmZlY4JxhmZmZW\nOCcYZmZmVjgnGGZmZlY4JxhmZmZWOCcYZmZmVjgnGGZmZlY4JxhmZmZWOCcYZmZmVjgnGGZmZlY4\nJxhmZmZWOCcYZmZmVjgnGGZmZlY4JxhmZmZWuJZKMCSdImmcpNmS3ik7niXd6NGjyw6h5ficdY/P\nW+N8zrrH563ntFSCAfQDbgOuKDuQ3sD/iI3zOesen7fG+Zx1j89bz1mq7AAaERFnAUgaUXYsZmZm\n1rlWq8EwMzOzFuAEw8zMzApXehOJpPOBf+1ilQA2iojnu3mIZQAmTpzYzc17rxkzZtDW1lZ2GC3F\n56x7fN4a53PWPT5vjam6di7T6LaKiGKjaTQAaWVg5Y9YbVJEfFi1zQhgZESsVMf+9wNu/nhRmpmZ\n9Wr7R8QtjWxQeg1GRLwNvL0YDzEG2B+YAvxtMR7HzMxsSbMMsA7pWtqQ0hOMRkhaC1gJGAj0lbRZ\nXvRCRMzuaJucwDSUdZmZmdkCD3Zno9KbSBoh6TrgwA4WfSUi/tzT8ZiZmVnHWirBMDMzs9bg21TN\nzMyscE4wzMzMrHC9LsGQ9DVJD0t6X9I7kn5TdkytQlJ/SY9Lapf0ubLjaVaSBkq6RtKk/D77q6Qf\nSepXdmzNRtIPJE2W9EH+v/xi2TE1M0knS3pU0nuS3pD0W0nrlx1XK5F0Uv4Mu7TsWJqdpNUl3STp\nrfxZ9oSkIfVu36sSDEnDgBuBfwc+C2yD7zBpxEXAy6SHn1nnNgQEfA/YGDgWOAI4r8ygmo2kfYBL\ngDOBzwNPAGMkrVJqYM1tO+AyYEvgq6QBIO+WtGypUbWInMAeRnqvWRckrQiMA+YAuwIbAccD0+ve\nR2/p5CmpL+lZGKdHxPXlRtN6JP0TcDEwDHgG2Dwiniw3qtYh6QTgiIgYXHYszULSw8AjEXF0nhfw\nEjAqIi4qNbgWkZOxacCXI+KBsuNpZpIGABOAfwZOBx6LiOPKjap5SboA2Doitu/uPnpTDcYQYHUA\nSW2SXpV0p6RNSo6r6UlaFbgK+A7wQcnhtKoVgXfKDqJZ5OaiocCfKmWRvu3cA2xdVlwtaEVSjaLf\nWx/t58AdETG27EBaxB7AeEm35ea4NkmHNrKD3pRgDCJVW58JnA18jVTVc1+uCrLOXQdcHhGPlR1I\nK5I0GDgSuLLsWJrIKkBf4I2a8jeA1Xo+nNaTa3x+AjwQEc+UHU8zk7QvsDlwctmxtJBBpNqe54Bd\ngCuAUZIOqHcHLZ9gSDo/d9jp7Gd+7gRVea3nRsTv8sXyIFL2v3dpL6Ak9Z43SUcBA4ALK5uWGHap\nGnivVW+zBnAXcGtEXFtO5LaEupzUx2ffsgNpZpLWJCVi+0fEvLLjaSF9gAkRcXpEPBERVwNXk/qT\n1aWlHhXeiYtJ37C7MoncPAIsGBouIuZKmgSsvZhia2b1nLfJwFdIVdZz0hemBcZLujkiDlpM8TWj\net9rQOqBDYwlfcM8fHEG1oLeAuYDq9aUrwq83vPhtBZJPwN2B7aLiNfKjqfJDQX+EWjTwg+xvsCX\nJR0JLB29pTNiY16j6nqZTQS+We8OWj7BqHewNEkTSL1hNyA/Vz23A68DTF2MITalBs7bD4FTq4pW\nJw16823g0cUTXXNqZGC+XHMxFvgLcPDijKsVRcS8/D+5E3A7LKjy3wkYVWZszS4nF98Ato+IF8uO\npwXcQ7prsNr1pIvlBU4uOjWOdL2stgENXC9bPsGoV0TMlHQlcJakl0kn6URSE8l/lhpcE4uIl6vn\nJc0mNZNMiohXy4mqueWai/tINUAnAp+qfHGKiNo+B73ZpcD1OdF4lHQ773KkD3/rgKTLgeHAnsDs\n3AEbYEZEeLToDuSBMBfpo5I/x96OiNpv6LbQSGCcpJOB20i3Rh9Kuv2+Lr0mwchOAOaRnoWxLPAI\nsGNEzCg1qtbjjL9rO5M6SA0i3XYJKSkLUtWsARFxW77N8mxS08jjwK4R8Wa5kTW1I0jvo/tqyg8i\nfa5ZffwZ9hEiYrykvYALSLf1TgaOjohf1ruPXvMcDDMzM+s5LX8XiZmZmTUfJxhmZmZWOCcYZmZm\nVjgnGGZmZlY4JxhmZmZWOCcYZmZmVjgnGGZmZlY4JxhmZmZWOCcYZiWTtH0ejfUTZcfSCEn3Srq0\nwP1dJ+k3Re2vDJIm5xGIK/PtkvYsMyazsjjBMFuMqoZx72x49zPyqk37SN0uEqC9SI8Q7nUkjZA0\nvYNFXwCu6ul4zJpRbxuLxKynrVb1+77AWcD6pLFJAGYBX+zpoCCNJhwR8+pZlZQAqbowIt5dLIG1\nhso5WUQecdfMcA2G2WIVEdMqP8CMVBRvVpW/X7X6FyT9RdJsSeMkrVe9L0nfkDRB0geSXpB0hqQ+\nVcvXkvR7STMlzZB0q6RPVS0/U9Jjkg6RNAn4IJdL0smSJkl6P68zLC8bSBp2HmB6rnW5Ni9bpIlE\nUn9JF0p6UdLfJD0v6aC8rI+ka6qO8Wx1U0K9JH1X0lRJsyT9WtJx1TUJHTWzSBop6d6q+V0l3S9p\nuqS3JN0haVDV8oG5xmYvSWPz3+NxSVvl5dsD1wIr1NZE1TaRdBD/mvnvMl3S25J+l89xZfkOkh7J\nr296jnOtRs+TWTNwgmHWHAScSxqyfCjwIekilhZK2wE3kIZQ3hA4HBgBnJqXC7gdWBHYDvgqaTTX\n2pEPBwPfJDVvbJ7LTgG+AxwGbJyPcVM+5ovAsLzeesCngaM7eQ03AfsAR+YYDyXV0ED6rHkp72sj\nUk3OeZK+9dGnZsE52BK4BhiVY78XOI36mpeq11keuAQYAuwIzAd+28E25wIXAZsBzwO35ITuQeAY\n4D3SKLCfBi6uI/6lgDGkRHNbYBtgJvBHSUtJ6pvjuBfYFNiK1NzStM1nZl1xE4lZcwjglIh4AEDS\nBcAfJPWPiLnAGcD5EfEfef2p+VvzRcA5pIRiE2CdiHg17+NA4GlJQyNiQt6uH3BARLyT1+kPnAzs\nFBGP5HWm5OTi8Ii4X9I7ufzNiHivo+AlrQ/snfdTqS2YsuDFRXxISioqpkraBvg28Ks6z9FRwF0R\ncUme/5mkbYFd69y+EkttDcehwDRJG0fEM1WLfhwRf8zrnAn8LzA4Ip6XtKA2qoFD70sawfqwqmMf\nAkwHdgAmAJ8A/isipuRVnmvktZk1E9dgmDWPp6p+fy1PK00cmwFn5OaPmZJmAlcDq0pahlRj8FIl\nuQCIiInAu6Qag4qpleQiGwwsB/x3zb4PINWA1GszUq3LnztbQdIPJI2XNC0f4zBg7QaOsRHwSE3Z\nQw1sX4ljsKRbJP1fThQmkxK82lhq/x5i4d+jOz4HrFdznt8GlgbWjYjppFqquyXdLukoSat1tUOz\nZuYaDLPmUd3hslItXvkSMIBUi9HRbZxzGjjG7Jr5AXm6O/BqzbJG9vtBVwsl7Qv8mNQE9DCpaeBE\nYIsGjlGPdmo6o5Jqbar9gZRUHEp6zX2Ap4H+Net19ffojgHAeGC/DmJ8EyAiDpb0U2A3UnPTOZJ2\njohHP8ZxzUrhBMOsNbQBG0TEpI4WSpoIrCVpjYh4JZdtTOqT8XQX+32GlEgMrDTPdGBunvbtYj9P\nkS6+27OwU2i1bYBxEfGLqpjX7WJ/HZkIbFlTtnXN/JukpqJqm5Nfg6SVSHfxHBIR43LZlzo41kf1\ne5hL1+ejI22kJqE3I2JWZytFxBPAE8CFkh4kJSROMKzluInErDnUfqOtLTsbOFDpzpGNJW0oaR9J\n5wBExD2kPgI3S/q8pC1I1e33RsRjnR00X+guBkZKOlDSoLz9kZIOyKtNJV1w95C0iqTlO9jPVOBG\n4Fqlu13WUXp+xt55lb+S7pLZRdJ6ks6m8dtzRwG7STo+N3Mcyd/3vxibj3NAXudHpA6TFdNJzRKH\nSVpX0o6kDp+1CUVHf49qU4ABknaUtLKkZeuI/2bgLeD3kr6Uz9EOkn4qafU8/2+StpK0tqRdSB1r\nn+l6t2bNyQmGWXPo6BvzgrKIuBv4OrAz6dvsQ6Q7GaZUrb8n6QL6P8DdwAukjoVdHzjidFJH0ZNI\nF7O7SE0mk/PyV4EzgQuA14HLOtnVEaQOmz8n1TZcRerfAfALUvPOL0lNJCvl9eqWO6F+j9TZ83FS\nx9Zzata5O5ddSDpPA0iJVmV5kJoehpJqXS4BTujocF2VRcRDwJXArcA04F862a56mw+AL5PuzPk1\n6VxfTeqD8R7wPqkvza9InTuvBC6LCD+4y1qS0v+bmVnrkTQCGBkRK5Udi5ktyjUYZmZmVjgnGGZm\nZlY4N5GYmZlZ4VyDYWZmZoVzgmFmZmaFc4JhZmZmhXOCYWZmZoVzgmFmZmaFc4JhZmZmhXOCYWZm\nZoVzgmFmZmaFc4JhZmZmhft/adj8h5QTOAsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff781e23a50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pylab \n",
    "import scipy.stats as stats\n",
    "# stats.probplot(np.log10(Tall).reshape((len(Tall),)), dist=stats.nct, sparams=(150, 0.2), plot=pylab)\n",
    "stats.probplot(np.log10(Tall).reshape((len(Tall),)), dist=\"norm\", plot=pylab)\n",
    "pylab.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，还是基本符合正态分布的。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7ff7817e2bd0>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff78184db10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "[F, x, p] = hist(y, bins = 5)\n",
    "xlabel('Rate')\n",
    "ylabel('Frequency')\n",
    "title('My rate distribution')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "\n",
    "\n",
    "## 性癖的机器学习\n",
    "我为381部电影打了分，当然是根据个人的喜好，比如我对平刘海有着深刻的好感，没有平刘海简直就不是女生（逃\n",
    "\n",
    "为了让机器知道我喜欢那些电影，以后自动帮我下载（误\n",
    "\n",
    "我需要让机器学习一下我的癖好，就根据网站上的标签（我称之为Tag，其实是Categories）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test:79, Train:453\n",
      "Positive rate:31.390977%\n"
     ]
    }
   ],
   "source": [
    "considerTime = False\n",
    "import random\n",
    "if considerTime:\n",
    "    Xt = np.concatenate((np.log10(T), X), axis=1)\n",
    "else:\n",
    "    Xt = X\n",
    "index = [i for i in range(len(y))]\n",
    "random.shuffle(index)\n",
    "Xt = Xt[index,:]\n",
    "y = y[index]\n",
    "testRange = int(len(y)*0.15)\n",
    "Xt_test = Xt[:testRange,:]\n",
    "y_test = y[:testRange]\n",
    "Xt_train = Xt[testRange:,:]\n",
    "y_train = y[testRange:]\n",
    "print \"Test:%d, Train:%d\" % (len(y_test), len(y_train))\n",
    "print \"Positive rate:%f%%\" % (sum(y>-0.5)[0]*100.0/len(y))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用Logistic模型对性癖进行学习\n",
    "下面是用Logistic Regression对性癖进行学习，使用了sklearn中的LogisticRegressionCV（带交叉验证的Logistic回归）\n",
    "我特地没有考虑时间，因为实际验证的时候，因为有些片子的时间有错误，有的长达十几个小时，导致推荐的都是这些乱七八糟的影片。\n",
    "虽然使用时间能达到更高的精度，但是却和“学习性癖”这个主题背道而驰了。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Done   4 out of   4 | elapsed:   25.1s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=60, class_weight=None, cv=4, dual=False,\n",
       "           fit_intercept=True, intercept_scaling=1.0, max_iter=1000,\n",
       "           multi_class='ovr', n_jobs=1, penalty='l2', random_state=None,\n",
       "           refit=True, scoring=None, solver='lbfgs', tol=0.0001, verbose=1)"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sklearn.linear_model\n",
    "regr = sklearn.linear_model.LogisticRegressionCV(\n",
    "    Cs=60, fit_intercept=True, cv=4, dual=False, \n",
    "    penalty='l2', scoring=None, solver='lbfgs', tol=0.0001, \n",
    "    max_iter=1000, class_weight=None, n_jobs=1, verbose=1)\n",
    "regr.fit(Xt_train, y_train>-0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "y_train_predict = regr.predict(Xt_train)\n",
    "y_test_predict = regr.predict(Xt_test)\n",
    "y_train_real = np.reshape(y_train>-0.5,y_train_predict.shape)\n",
    "y_test_real = np.reshape(y_test>-0.5,y_test_predict.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "------------ACCURACY-------------\n",
      "Train accuracy: 68.211921%\n",
      "Test accuracy: 70.886076%\n"
     ]
    }
   ],
   "source": [
    "# 输出报告\n",
    "from sklearn import metrics\n",
    "print('------------ACCURACY-------------')\n",
    "print \"Train accuracy: %f%%\" % (sum(y_train_predict==y_train_real)*100.0/len(y_train_real))\n",
    "print \"Test accuracy: %f%%\" % (sum(y_test_predict==y_test_real)*100.0/len(y_test_real))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "print('-------------REPORT-------------')\n",
    "print('TRAIN RESULT')\n",
    "print(metrics.classification_report(y_train_real, y_train_predict))\n",
    "print('TRAIN CONFUSION MATRIX')\n",
    "print(metrics.confusion_matrix(y_train_real, y_train_predict))\n",
    "\n",
    "print('TEST RESULT')\n",
    "print(metrics.classification_report(y_test_real, y_test_predict))\n",
    "print('TEST CONFUSION MATRIX')\n",
    "print(metrics.confusion_matrix(y_test_real, y_test_predict))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "coefficients: [[-0.03172487  0.16995903  0.09398287 ...,  0.          0.10091245\n",
      "   0.03079246]]\n",
      "intercept: [-1.31674931]\n"
     ]
    }
   ],
   "source": [
    "print \"coefficients:\",regr.coef_        #与X结合的值  \n",
    "print \"intercept:\",regr.intercept_         #类似于截距  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Positive top N words: Fucking,Porno Vrai,Blowjobs,German,Shaved,French,Young Masturbating,Masturbating,Chubby,Sexy Latina,Fisting and Squirting,Teens,Gangbang,Pussy Fucking,Muscular Women,Double Penetration,Hardcore,Creampie,Japanese,Anal\n",
      "Negative top N words: Amateur,Close-ups,Throat Fuck,Big Dick,Bisexuals,Sexy Horny,Flashing,Outdoor,Hidden Cams,Public Nudity,Redheads,Wife,Sofia Gucci,Anal Fuck,Granny,Cock Suckers,Student,Oral,Mexican,Private\n"
     ]
    }
   ],
   "source": [
    "index = np.argsort(regr.coef_[0])\n",
    "tag_sorted = []\n",
    "for i in index:\n",
    "    tag_sorted.append(tag_list[i])\n",
    "\n",
    "# 显示对分类有正贡献的词汇和负贡献的词汇\n",
    "N = 20\n",
    "print \"Positive top N words:\",\",\".join(tag_sorted[-N:])\n",
    "print \"Negative top N words:\",\",\".join(tag_sorted[:N])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用线性回归对影片进行评分估测\n",
    "下面尝试使用线性回归对我的打分进行分析，但是这种方法并不好，首先我打分并不一定符合实际的分布，要适应实际分布就要引入非线性算法，就要降低可解释性，或者陷入对打分使用一个单调增函数进行变换，然后无尽的调整这个函数的江局中去。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "............................................................................................................................................................................................................................................................................................................[Parallel(n_jobs=1)]: Done   3 out of   3 | elapsed:  2.8min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001, fit_intercept=True,\n",
       "    max_iter=1000, n_alphas=100, n_jobs=1, normalize=False, positive=False,\n",
       "    precompute='auto', random_state=None, selection='cyclic', tol=0.0001,\n",
       "    verbose=True)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sklearn.linear_model\n",
    "lasso_ratemodel = sklearn.linear_model.LassoCV(\n",
    "    eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "    normalize=False, precompute='auto', max_iter=1000, tol=0.0001, \n",
    "    copy_X=True, cv=None, verbose=True, n_jobs=1, positive=False, \n",
    "    random_state=None, selection='cyclic')\n",
    "\n",
    "lasso_ratemodel.fit(Xt_train, y_train.reshape((len(y_train),)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train error: 1.01993 Test error: 1.10948\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nUkf9f0Zt/x21lHlJAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff77c21dad0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_train_predict = lasso_ratemodel.predict(Xt_train)\n",
    "y_test_predict = lasso_ratemodel.predict(Xt_test)\n",
    "plot(y_train,y_train_predict,'b.',y_test,y_test_predict,'r.',[-2,2],[-2,2],'g-')\n",
    "import sklearn.metrics as skm\n",
    "r_train = np.sqrt(skm.mean_squared_error(y_train_predict,y_train))\n",
    "r_test = np.sqrt(skm.mean_squared_error(y_test_predict,y_test))\n",
    "print \"Train error:\", r_train, \"Test error:\", r_test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Logistic模型实战用于影片推荐\n",
    "所以我们最后还是选择了Logistic回归为我的影片进行打分。\n",
    "下面是用训练好的Logistic模型为我爬虫爬到的所有电影打分，并且我使用了一个django网站来显示这些影片的预览，来看看和我的喜好是否相符合。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from scipy import sparse\n",
    "if considerTime:\n",
    "    Xpred = np.zeros(\n",
    "            (len(result_set_all), len(tag_index_dict)+ 1), \n",
    "            dtype=\"float32\" )\n",
    "    for i in range(len(result_set_all)):\n",
    "        Xpred[i, 0] = np.log10(result_set_all[i][-1])\n",
    "        for tag in result_set_all[i][3]:\n",
    "            if tag_index_dict.has_key(tag):\n",
    "                Xpred[i, tag_index_dict[tag] + 1] = 1\n",
    "else:\n",
    "    Xpred = np.zeros(\n",
    "            (len(result_set_all), len(tag_index_dict)), \n",
    "            dtype=\"float32\" )\n",
    "    for i in range(len(result_set_all)):\n",
    "        for tag in result_set_all[i][3]:\n",
    "            if tag_index_dict.has_key(tag):\n",
    "                Xpred[i, tag_index_dict[tag]] = 1\n",
    "Xpred = sparse.coo_matrix(Xpred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "yp = regr.predict(Xpred)\n",
    "pr = regr.predict_proba(Xpred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "prob_pos = pr[:,1]\n",
    "prob_pos = np.sort(prob_pos)\n",
    "plot(prob_pos[1:3000]) # 观察SORT后前3000部电影的Value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "Write2SQL=False\n",
    "if Write2SQL:\n",
    "    conn = genSQLConnection()\n",
    "    cur = conn.cursor()\n",
    "    for i in xrange(len(result_set_all)):\n",
    "        sql_cmd = \"UPDATE public.xhamster_spider SET recommand_info=%f WHERE id=%d;\" % (pr[i,0], result_set_all[i][0])\n",
    "        cur.execute(sql_cmd)\n",
    "        conn.commit()\n",
    "        if i % 10000 == 0:\n",
    "            print \"%d logs finished.\" % i\n",
    "    cur.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x7ff77cb3b290>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff7817c4310>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "conn = genSQLConnection()\n",
    "cur = conn.cursor()\n",
    "sql_cmd = \"select recommand_info from public.xhamster_spider\"\n",
    "cur.execute(sql_cmd)\n",
    "res = cur.fetchall()\n",
    "cur.close()\n",
    "conn.close()\n",
    "res = [x[0] for x in res]\n",
    "[F, x, p] = hist(1-np.array(res), bins = 100)\n",
    "xlabel('Recommand prob')\n",
    "ylabel('Frequency')\n",
    "title('My recommand distribution')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test:79, Train:453\n",
      "Positive rate:31.390977%\n"
     ]
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [conda root]",
   "language": "python",
   "name": "conda-root-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
